import json
import re
import time

from flask import session, request, redirect, url_for, g

from models import db
from models.index import User, Product, ShopCar


def in_order_product(product_list):
    product_info_list = []
    product_list = product_list.replace('\'', '\"')
    product_dict = json.loads(product_list)
    for x, y in product_dict.items():
        product = db.session.query(Product).filter(Product.id == x).first()
        product.count = y
        product_info_list.append(product)
    return product_info_list


def get_order_code():
    """生成唯一订单号"""
    order_no = str(time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))) + str(time.time()).replace('.', '')[-7:]
    return order_no


def set_after_request_handle_fuc(app):
    """
    对flask对象 设置 每次调用视图函数之前，要执行的事情
    """

    @app.before_request
    def before_request():
        # 查询当前登录用户，如果未登录那么g.user为None，如果登录了g.user就是当前登录用户对象
        # 之所有用g变量，是因为我们可以把需要给视图函数传递的参数，通过给g对象添加属性的方式让g进行携带
        # 然后在视图函数中就可以通过g.user提取出来。也就是说g能够帮我们在多个函数之间传递参数
        user_id = session.get("user_id")
        g.user = db.session.query(User).filter(User.id == user_id).first()
        g.shop_car_count = 0
        if g.user:
            g.shop_car_count = len(g.user.like_product)
        # 如果请求路径是/admin开始，那么就检查是否有管理员权限
        # 如果是管理员的话g.user.is_admin此时是1，如果不是 那么就是0
        # if g.user:
        #     if request.path.startswith("/admin"):
        #         return redirect(url_for('index.index'))
